Land Surveyors United Logo

How Land Surveying Varies by US State

Here are almost 100 examples of how Land Surveying is quite...

`; document.body.appendChild(writerModal); } // Set values const today = new Date(); writerModal.querySelector('#creationDate').value = today.toISOString().split('T')[0]; writerModal.querySelector('#courseOutline').innerHTML = buildDetailedOutline(subject, state); // Show modal writerModal.style.display = 'block'; } function openExampleModal(title, example) { const modal = document.getElementById('exampleDetailsModal'); const titleEl = document.getElementById('exampleDetailsTitle'); const content = document.getElementById('exampleDetailsContent'); title = title.replace(/['"]/g, '"'); titleEl.textContent = title; content.innerHTML = `
${example.category}
${Object.entries(example.details || {}).map(([state, detail]) => `

${state}

${generateDetailedDescription(state, detail)}

`).join('')}

Related Topics

${examples.filter(ex => ex.title !== title && ( ex.category === example.category || ex.states.some(s => example.states.includes(s)) ) ).slice(0, 6).map(topic => `
${topic.category}

${topic.title}

${topic.states.slice(0,2).join(', ')} ${topic.states.length > 2 ? '...' : ''}
${topic.states.map(state => ` `).join('')}
`).join('')}

Convert Your Field Knowledge into a Legacy

While earning PDH credits, royalties everytime a student enrolls and ability to share your course nation wide with the NSPS

`; modal.style.display = 'block'; } function closeExampleModal() { document.getElementById('exampleDetailsModal').style.display = 'none'; document.getElementById('relatedTopics').innerHTML = ''; } function populateStateDropdowns() { const dropdowns = ['state1', 'state2']; dropdowns.forEach(id => { const select = document.getElementById(id); select.innerHTML = ''; allStates.forEach(state => { const option = document.createElement('option'); option.value = state; option.textContent = state; select.appendChild(option); }); }); } function updatePreview() { const state1 = document.getElementById('state1').value; const state2 = document.getElementById('state2').value; const comparison = document.getElementById('comparison').value; const category = document.getElementById('exampleCategory').value; const previewCard = document.getElementById('previewCard'); previewCard.innerHTML = `
${category ? ` ${category} ` : ''}

State Comparison

${state1 ? `

${state1}

${comparison ? generateDetailedDescription(state1, comparison) : 'No comparison added yet...'}

` : ''} ${state2 ? `

${state2}

${comparison ? generateDetailedDescription(state2, 'Comparative analysis pending...') : 'Comparative analysis will appear here...'}

` : ''}
`; // Enable/disable submit button based on form completion const submitBtn = document.getElementById('submitExampleBtn'); submitBtn.disabled = !(state1 && state2 && comparison && category); } function submitExample() { const state1 = document.getElementById('state1').value; const state2 = document.getElementById('state2').value; const comparison = document.getElementById('comparison').value; const category = document.getElementById('exampleCategory').value; if (!state1 || !state2 || !comparison || !category) { alert('Please fill in all fields'); return; } // Create new example object const newExample = { title: `${state1} vs ${state2} Surveying Comparison`, category: category, states: [state1, state2], details: { [state1]: generateDetailedDescription(state1, comparison), [state2]: generateDetailedDescription(state2, "Comparative analysis pending...") } }; // Add to examples array examples.push(newExample); // Update display displayExamples(); // Close modal closeModal(); // Show success message const successMsg = document.createElement('div'); successMsg.className = 'fixed bottom-4 right-4 bg-green-600 text-white px-6 py-3 rounded-lg shadow-lg'; successMsg.textContent = 'Example added successfully!'; document.body.appendChild(successMsg); setTimeout(() => { successMsg.remove(); }, 3000); } function handleCourseButton(state, title, details) { // Close any open modals first including example details modal const openModals = document.querySelectorAll('.modal'); openModals.forEach(modal => { modal.style.display = 'none'; }); // Open course modal openCourseModal(state, title, details); } function getCategoryColor(category, clickable = false) { const colors = { 'Mining': 'bg-yellow-600', 'Energy': 'bg-green-600', 'Infrastructure': 'bg-blue-600', 'Heritage': 'bg-[#ff9900]', 'Environmental': 'bg-emerald-600', 'Weather': 'bg-cyan-600', 'Aviation': 'bg-orange-600', 'Geology': 'bg-purple-600', 'Coastal': 'bg-teal-600', 'Topography': 'bg-indigo-600', 'Urban Planning': 'bg-pink-600', 'Agriculture': 'bg-lime-600', 'Public Lands': 'bg-amber-600', 'Conservation': 'bg-emerald-600', 'Hydrology': 'bg-sky-600', 'Transportation': 'bg-rose-600', 'Redevelopment': 'bg-fuchsia-600', 'Legal': 'bg-violet-600', 'default': 'bg-gray-600' }; const baseClass = colors[category] || colors.default; return clickable ? `${baseClass} cursor-pointer hover:opacity-80` : baseClass; } function filterByCategory(selectedCategory) { activeFilters.category = selectedCategory; // Reset state filter when category is selected document.getElementById('stateFilter').value = ''; activeFilters.state = null; displayExamples(); // Clear related topics if no category selected if (!selectedCategory) { document.getElementById('relatedTopics').innerHTML = ''; } } function filterByState(selectedState) { activeFilters.state = selectedState; activeFilters.category = null; // Reset category filter document.getElementById('topicFilter').value = ''; // Reset topic dropdown displayExamples(); // Clear related topics if no state selected if (!selectedState) { document.getElementById('relatedTopics').innerHTML = ''; } } function displayExamples(selectedState = activeFilters.state, searchTerm = '') { const container = document.getElementById('examples'); container.innerHTML = ''; examples.forEach(example => { const matchesState = !selectedState || example.states.includes(selectedState); const matchesCategory = !activeFilters.category || example.category === activeFilters.category; const matchesSearch = !searchTerm || example.title.toLowerCase().includes(searchTerm.toLowerCase()) || JSON.stringify(example.details).toLowerCase().includes(searchTerm.toLowerCase()); if (matchesState && matchesCategory && matchesSearch) { const card = document.createElement('div'); card.className = 'card p-6 rounded-lg bg-dark-100 shadow-lg'; let content = `
${example.category}

${example.title}

`; if (selectedState) { content += `

${generateDetailedDescription(selectedState, example.details[selectedState])}

${selectedState}

`; } else { example.states.forEach(state => { content += `

${state}

${example.details[state]}

`; }); content += `
${example.states.map(state => ` `).join('')}
`; } card.innerHTML = content; container.appendChild(card); } }); // Find related topics for the current example - fix undefined error const relatedTopics = examples.filter(topic => // Only show related topics if we have an active selection (activeFilters.state || activeFilters.category) && topic.title !== activeFilters.state && ( topic.category === (activeFilters.category || topic.category) || topic.states.some(s => activeFilters.state === s) ) ).slice(0, 6); // Show up to 6 related topics if (relatedTopics.length > 0) { const topicsHTML = relatedTopics.map(topic => `
${topic.category}

${topic.title}

${topic.states.slice(0,2).join(', ')} ${topic.states.length > 2 ? '...' : ''}
`).join(''); // Add related topics section document.getElementById('relatedTopics').innerHTML = topicsHTML; } } function createStateFilters() { const stateFilter = document.getElementById('stateFilter'); stateFilter.innerHTML = ''; allStates.forEach(state => { const hasContent = examples.some(ex => ex.states.includes(state)); if (hasContent) { const option = document.createElement('option'); option.value = state; option.textContent = state; stateFilter.appendChild(option); } }); } function reactToExample(exampleId, reaction) { const prevReaction = reactionDB.getUserReaction(exampleId, currentUserId); // Remove previous reaction if clicking same button if (prevReaction === reaction) { reactionDB.setReaction(exampleId, currentUserId, null); } else { reactionDB.setReaction(exampleId, currentUserId, reaction); } updateReactionDisplay(exampleId); } function buildDetailedOutline(subject, state) { // Build custom outline based on category/state const outlineTemplate = `

Course Introduction

This comprehensive course provides extensive training on ${subject} specifically designed for professional land surveyors in ${state}. Through five detailed modules combining classroom instruction with hands-on field exercises, participants will gain deep understanding of state-specific requirements, advanced methodological approaches, and practical applications in real-world scenarios. The curriculum integrates theoretical foundations with current industry best practices, ensuring surveyors develop both technical proficiency and regulatory compliance expertise.

Learning Objectives:

${[1,2,3,4,5].map(chapter => `

Chapter ${chapter}: ${getChapterTitle(subject, chapter)}

Introduction Tips & ${state} Requirements

${getStateRequirements(state, subject, chapter)}

Submodules
  • ${getSubmodule(subject, chapter, 1)}
  • ${getSubmodule(subject, chapter, 2)}
Field Exercise

${getFieldExercise(subject, state, chapter)}

Documentation Requirements:

  • Photos: ${getPhotoRequirements(subject, chapter)}
  • Video: ${getVideoRequirements(subject, chapter)}
  • Documents: ${getDocumentRequirements(subject, state, chapter)}
`).join('')}
`; return outlineTemplate; } // Helper functions for course outline generation function getChapterTitle(subject, chapter) { const titles = { 1: `Fundamentals of ${subject}`, 2: 'Field Methods and Equipment', 3: 'Data Collection and Analysis', 4: 'Regulatory Compliance', 5: 'Advanced Applications' }; return titles[chapter]; } function getSubmodule(subject, chapter, number) { const submodules = { 1: { 1: 'Core Principles and Theory', 2: 'Industry Standards and Best Practices' }, 2: { 1: 'Equipment Selection and Setup', 2: 'Field Operations and Safety' }, 3: { 1: 'Data Collection Methods', 2: 'Analysis and Interpretation' }, 4: { 1: 'Regulatory Framework', 2: 'Compliance Documentation' }, 5: { 1: 'Emerging Technologies', 2: 'Future Trends and Applications' } }; return submodules[chapter][number]; } function getStateRequirements(state, subject, chapter) { return `This chapter addresses ${state}'s specific requirements for ${subject.toLowerCase()} as outlined in state code section ${Math.floor(Math.random() * 20)}-${Math.floor(Math.random() * 100)}.${Math.floor(Math.random() * 10)}. Special attention is given to local conditions and regional considerations.`; } function getFieldExercise(subject, state, chapter) { return `Students will conduct a supervised field exercise demonstrating ${subject.toLowerCase()} techniques at a designated site in ${state}. This hands-on experience will reinforce classroom concepts and provide practical experience with local conditions.`; } function getPhotoRequirements(subject, chapter) { return 'Site conditions, equipment setup, measurement procedures, and final results documentation'; } function getVideoRequirements(subject, chapter) { return 'Recording of complete field procedure, equipment demonstration, and methodology walkthrough'; } function getDocumentRequirements(subject, state, chapter) { return `Field notes, ${state} compliance forms, equipment calibration records, and final report templates`; } function generateDetailedDescription(state, baseText) { // If text is the pending message, return as-is if(baseText === "Comparative analysis pending...") { return baseText; } // For modal view, generate expanded 120+ word description if(document.querySelector('#exampleDetailsModal').style.display === 'block') { return `In ${state}, land surveying practices require careful attention to local regulations and environmental conditions. ${baseText} The unique geographical and regulatory landscape of ${state} presents both challenges and opportunities for surveyors working across diverse terrains and jurisdictions. Professional surveyors working in ${state} must stay current with state-specific requirements while maintaining the highest standards of accuracy and reliability. This comprehensive understanding of local conditions, combined with technical expertise, ensures successful project outcomes. Surveyors must demonstrate proficiency in utilizing modern equipment while adhering to traditional methodologies that have proven effective in the region. The evolving nature of regulations and best practices requires ongoing professional development and networking with fellow surveyors to share knowledge and experiences specific to the area. Furthermore, the dynamic nature of the profession demands that surveyors maintain strong relationships with local agencies and stakeholders, regularly update their understanding of state-specific requirements, and actively participate in professional development opportunities to stay current with emerging technologies and methodologies applicable to their region. This holistic approach enables surveyors to deliver high-quality services while meeting all regulatory requirements.`; } // For card view, keep shorter description return `In ${state}, land surveying practices require careful attention to local regulations and environmental conditions. ${baseText} The unique geographical and regulatory landscape of ${state} presents both challenges and opportunities for surveyors working across diverse terrains and jurisdictions. Professional surveyors working in ${state} must stay current with state-specific requirements while maintaining the highest standards of accuracy and reliability.`; } // Helper function to get today's date function getTodayDate() { const today = new Date(); return today.toISOString().split('T')[0]; } function handleChapterChange(chapterNum) { courseContent.currentChapter = parseInt(chapterNum); const content = courseContent.chapters[chapterNum]; // Update editor content document.getElementById('chapterContent').innerHTML = content.content || 'Enter chapter content...'; document.getElementById('chapterObjectives').innerHTML = content.objectives || 'Add learning objectives...'; document.getElementById('chapterKeyPoints').innerHTML = content.keyPoints || 'Add key points...'; // Update preview pane updatePreviewPane(); } function updateChapterContent(field, content) { courseContent.chapters[courseContent.currentChapter][field] = content; updatePreviewPane(); } function saveChapterContent() { // Save current state to localStorage localStorage.setItem('courseContent', JSON.stringify(courseContent)); // Show save confirmation const notification = document.createElement('div'); notification.className = 'fixed bottom-4 right-4 bg-green-600 text-white px-6 py-3 rounded-lg shadow-lg'; notification.textContent = 'Chapter content saved!'; document.body.appendChild(notification); setTimeout(() => notification.remove(), 3000); } function updatePreviewPane() { const previewPane = document.getElementById('previewPane'); const chapter = courseContent.chapters[courseContent.currentChapter]; previewPane.innerHTML = `

Chapter ${courseContent.currentChapter}

Content

${chapter.content || 'No content yet'}

Learning Objectives

${chapter.objectives || 'No objectives yet'}

Key Points

${chapter.keyPoints || 'No key points yet'}
`; } function loadEditorContent() { const savedContent = JSON.parse(localStorage.getItem('advancedEditorContent') || '{}'); const tabs = document.querySelectorAll('.editor-tab'); const activeTab = tabs[0].dataset.tab; const content = savedContent[activeTab] || { outline: '', content: { chapters: { 1: { content: '', objectives: '', keyPoints: '' }, 2: { content: '', objectives: '', keyPoints: '' }, 3: { content: '', objectives: '', keyPoints: '' }, 4: { content: '', objectives: '', keyPoints: '' }, 5: { content: '', objectives: '', keyPoints: '' } } }, exercises: [], media: [], preview: '' }; switch(activeTab) { case 'outline': document.getElementById('editorContent').innerHTML = `
${content}
`; break; case 'content': document.getElementById('editorContent').innerHTML = `
${content.chapters[courseContent.currentChapter].content || 'Enter chapter content...'}

Learning Objectives

${content.chapters[courseContent.currentChapter].objectives || 'Add learning objectives...'}

Key Points

${content.chapters[courseContent.currentChapter].keyPoints || 'Add key points...'}
`; break; case 'exercises': document.getElementById('editorContent').innerHTML = `

Field Exercise Setup

Documentation Requirements

Photos

  • Site conditions
  • Equipment setup
  • Measurement procedures
  • Final results

Video

  • Field procedure walkthrough
  • Equipment demonstration
  • Key measurement steps
`; break; case 'media': document.getElementById('editorContent').innerHTML = `

Upload Assets

Asset Library

example-image.jpg

`; break; case 'preview': document.getElementById('editorContent').innerHTML = `
${content}
`; break; } // Update preview pane document.getElementById('previewPane').innerHTML = content; } const tabs = document.querySelectorAll('.editor-tab'); tabs.forEach(tab => { tab.addEventListener('click', function() { tabs.forEach(t => t.classList.remove('active')); this.classList.add('active'); loadEditorContent(); }); }); function downloadOutline() { const notification = document.getElementById('downloadNotification'); notification.style.display = 'block'; setTimeout(() => { notification.style.display = 'none'; }, 5000); } function openCourseWriter() { // Get the title parts from the course modal const titleParts = document.getElementById('courseModalTitle').textContent.split(': ')[1].split(' for '); const subject = titleParts[0]; const state = titleParts[1]; const writerModal = document.getElementById('courseWriterModal'); if (!writerModal) { const writerModal = document.createElement('div'); writerModal.id = 'courseWriterModal'; writerModal.className = 'modal'; writerModal.innerHTML = ` `; document.body.appendChild(writerModal); } // Set values const today = new Date(); writerModal.querySelector('#creationDate').value = today.toISOString().split('T')[0]; writerModal.querySelector('#courseOutline').innerHTML = buildDetailedOutline(subject, state); // Show modal writerModal.style.display = 'block'; } function openFileUpload() { document.getElementById('templateUpload').click(); } function handleTemplateUpload(event) { const file = event.target.files[0]; if (!file) return; const reader = new FileReader(); reader.onload = function(e) { const content = e.target.result; // Parse the uploaded HTML const parser = new DOMParser(); const doc = parser.parseFromString(content, 'text/html'); // Extract course content const authorInfo = { name: doc.querySelector('#authorName')?.value || '', state: doc.querySelector('#authorState')?.value || '', username: doc.querySelector('#authorUsername')?.value || '', date: doc.querySelector('#creationDate')?.value || '' }; const courseOutline = doc.querySelector('#courseOutline')?.innerHTML || ''; // Open advanced editor with content openAdvancedEditor(); // Populate editor fields document.getElementById('authorName').value = authorInfo.name; document.getElementById('authorState').value = authorInfo.state; document.getElementById('authorUsername').value = authorInfo.username; document.getElementById('creationDate').value = authorInfo.date; document.getElementById('courseOutline').innerHTML = courseOutline; // Switch to outline tab const tabs = document.querySelectorAll('.editor-tab'); tabs.forEach(t => t.classList.remove('active')); document.querySelector('[data-tab="outline"]').classList.add('active'); loadEditorContent(); // Clear the file input event.target.value = ''; }; reader.readAsText(file); } const defaultContent = { outline: '', content: { chapters: { 1: { content: '', objectives: '', keyPoints: '' }, 2: { content: '', objectives: '', keyPoints: '' }, 3: { content: '', objectives: '', keyPoints: '' }, 4: { content: '', objectives: '', keyPoints: '' }, 5: { content: '', objectives: '', keyPoints: '' } } }, exercises: [], media: [], preview: '' }; function openAdvancedEditor() { const editor = document.getElementById('advancedEditor'); editor.style.display = 'block'; loadEditorContent(); } function closeAdvancedEditor() { document.getElementById('advancedEditor').style.display = 'none'; } // Add animation delay utility function function setStaggeredAnimations() { document.querySelectorAll('.space-y-6 > div').forEach((el, i) => { el.style.setProperty('--index', i); }); } // Update existing event listener document.addEventListener('DOMContentLoaded', function() { // Existing code remains... // Add animation triggers const courseModal = document.getElementById('courseModal'); courseModal.addEventListener('shown.bs.modal', setStaggeredAnimations); }); -->
Land Surveyors United Logo

Advanced Course Editor

Course Preview

Course file downloaded successfully!